class CertificacaoController < ApplicationController
  def index
    home
    render :action => 'home'
  end
  
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
  :redirect_to => { :action => :list }
  def show
    @requisicao = Requisicao.find(params[:id])
    @events = filtra_eventos(@requisicao.next_events_for_current_state)
        @certificadores = Certificador.find_by_sql("select t.id, t.name
                                from goldberg_users t, certificadores_requisicoes dr, requisicoes r
                                where t.id = dr.certificador_id
                                and dr.requisicao_id = r.id
                                and r.id = #{params[:id]}")
  end

  def home
    @requisicao_pages, @requisicoes = paginate(:requisicoes, :per_page => 10, 
                                      :conditions => "estado = 'aguardandoCertificacao' or
                                      estado = 'atualizacaoBdCanceladaCert' or
                                      estado = 'atualizacaoServidorCanceladaCert' or
                                      estado = 'atualizacaoServidorConcluidaCert' or
                                      estado = 'atualizacaoBdConcluidaCert'
                                      ")
  end
  
  def ultimas_req
    @requisicao_pages, @requisicoes = paginate(:requisicoes, :per_page => 10, :conditions => "estado = 'emCert' or  estado = 'escaladaCert'")     
  end
  
  def cancelarCert
    historico = Historico.new
    historico.attributes = params[:historico]
    historico.usuario_id = Goldberg.user.id
    @requisicao = Requisicao.find(historico.requisicao_id)
    @requisicao.cancelarCert!
    historico.estado = @requisicao.estado
    @requisicao.historicos << historico
    flash[:notice] = 'Operação realizada com sucesso.'        
    redirect_to :action => 'home'
  end  

  def solicitarAtualizacaoServidorCert
    historico = Historico.new
    historico.attributes = params[:historico]
    historico.usuario_id = Goldberg.user.id
    @requisicao = Requisicao.find(historico.requisicao_id)
    @requisicao.solicitarAtualizacaoServidorCert!
    historico.estado = @requisicao.estado
    @requisicao.historicos << historico
    case Goldberg.user.role_id
      when 10 then
        redirect_to :controller => 'certificador', :action => 'index'
      when 13 then
        redirect_to :controller => 'certificacao', :action => 'index'   
    end
  end

  #Essa ação pode ser executada tanto pelo certificador quanto pelo gerente de certificação
  def solicitarAtualizacaoBdCert
    historico = Historico.new
    historico.attributes = params[:historico]
    historico.usuario_id = Goldberg.user.id
    @requisicao = Requisicao.find(historico.requisicao_id)
    @requisicao.solicitarAtualizacaoBdCert!
    historico.estado = @requisicao.estado
    @requisicao.historicos << historico
    case Goldberg.user.role_id
      when 10 then
        redirect_to :controller => 'certificador', :action => 'index'
      when 13 then
        redirect_to :controller => 'certificacao', :action => 'index'   
    end
    puts Goldberg.user.role_id
  end  
  
  def add_certificador
    @requisicao = Requisicao.find(params[:requisicao][:req_id])
    cert_existentes = @requisicao.certificadores.collect
    @cert = Certificador.find(params[:certificador][:id])
    aux = nil
    for i in $lista_cert #iniciada em requisicoes_controller 
      if i == @cert.id.to_i
          aux = i.to_i
          @cert = nil
          flash[:notice] = "Certificador ja escalado"
      end
    end
    if aux.nil?
      $lista_cert << @cert.id.to_i
    end
    if $lista_cert.empty?
      @cert = Desenvolvedor.find(params[:certificador][:id])
      $lista_cert << @cert.id.to_i
    end      
  end

  def del_cert
    @requisicao = Requisicao.find(params[:requisicao])
    @requisicao.certificadores.delete(Certificador.find(params[:id]))
    render :update do |page|
      page.remove(params[:id])
    end
  end  

  def del_certificador
    aux = []
    for i in $lista_cert
      if i != params[:id].to_i
        aux << i.to_i
      end
    end
    $lista_cert = aux
    @cert = Certificador.find(params[:id])
    #      @requisicao = Requisicao.find(params[:req_id])
    #      @requisicao.desenvolvedores.delete(@desenv)
    render :update do |page|
      page.remove(@cert.dom_id)
    end
  end
  
  def escalarCertificador
    msg = ''
    @requisicao = Requisicao.find(params[:id])
    if !$lista_cert.empty?
      for i in $lista_cert
        @requisicao.certificadores << Certificador.find(i)
      end
    for certs in @requisicao.certificadores 
      msg = msg + certs.fullname + '; '
    end
    @requisicao.escalarCertificador!  
    historico = Historico.new
    historico.observacao = 'Certificação alocada para: ' + msg
    historico.usuario_id = Goldberg.user.id
    historico.estado = @requisicao.estado
    @requisicao.historicos << historico       
    flash[:notice] = 'Operação realizada com sucesso'
    redirect_to :action => "home"
  else
    flash[:notice] = 'Adicione pelomenos um desenvolvedor'
    redirect_to :controller => "requisicoes", :action => "escalarDesenvolvedor_tela", :id => @requisicao
  end   
  end
  
end